Businesses depend on computers for doing business, interacting with other businesses and interacting with consumers. Computer hardware technology is increasing daily at phenomenal rates. Business productivity software for doing desktop publishing, presentations, word processing, and minor business functionality is at an all time high, when it comes to the capability and ease of use. However, one area of the market in software development that is considerably lagging behind is the area of business software development or customized application development.
Many businesses are still using legacy-based systems that are running terminals, mainframes and coded primarily in COBOL. These systems usually consist of millions of lines of code. In order for business software development to move forward at a rate equivalent to hardware technology and other productivity software a new strategy of customized application development is needed. Despite the advances in technology, especially in the area of object-oriented programming, which promised massive reuse and extreme productivity, the productivity levels are still very limited when compared to hardware or other productivity software. The primary reason for this is that there is still too much coding required to produce custom business applications.
Some software environments give the user limited capabilities to assemble objects. Typically the result of assembling these objects is some type of code generation which then can be further customized by a skilled developer. Also these assembly tools are not tied to the actual running application, so that there are one or several steps between what an end user of the application would see and what the developer is actually seeing. These steps typically include some type of code generation, compilation, linking and then some combining of resources into an executable package which can then be run for the user. It is in this area that there are significant productivity losses as well as the need for the skilled resource or artist.
U.S. Pat. No. 5,583,983, which is incorporated in full by reference herein, describes a software deployment system in which an application is deployed within a computer on the basis of an archive, defined therein as an “object document”. The object document specifies what objects make up the application and the current state of each attribute of each object. The object document also defines the structure of the software application by specifying how the objects communicate to each other. The objects are usually linked together in an executable that either contains the object or has direct or indirect access to the disparate objects that make up a particular application.
As described in the '983 patent, the execution environment is provided with the ability to de-archive one or more object documents at runtime, which recreates the objects and their relationships to each other in the computer system. The de-archiving process consists of an object, commonly referred to as an Archiver object, which provides the capability of both persisting and awakening (archiving and de-archiving) the document. These two processes enable such object documents to be used as a dynamically changeable information source for both programming logic and data. Also, such object documents can reference each other to dynamically retrieve, load and awaken other object documents. The execution environment further includes the ability to bring in a starting document. This starting document could either automatically have the ability to retrieve other documents to perform its total functionality, or allow the user to access other documents which represent the entire application.
In one embodiment described in the '983 patent, objects are provided with a “Get” method, for obtaining their attributes from an archive, and with a “Put” method, for storing their attributes into an archive. However, once an application is deployed, its functionality remains static while the application is being executed. Other object-oriented application paradigms include methods by which objects store and retrieve their attributes, but such attributes remain static within the execution environment. It is desirable to provide an execution environment in which the attributes of the constituent objects could be modified, without having to resort to using a separate development environment for modifying the application. In such an environment, standard libraries of applications could be developed such that they would be readily customizable to meet the needs of a particular business. That is by changing an object's attributes, the functionality of the application will change “on the fly” in the runtime environment with no need for loading, compiling or linking.